package com.pai4j.log.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * 日志模块配置属性
 *
 * @author: CYM-pai
 * @date: 2025/07/29 16:35
 **/
@Data
@Component
@ConfigurationProperties(prefix = "pai4j.log")
public class LogProperties {

    /**
     * 是否启用日志模块
     */
    private boolean enabled = true;

    /**
     * 异步配置
     */
    private AsyncConfig async = new AsyncConfig();

    /**
     * 缓存配置
     */
    private CacheConfig cache = new CacheConfig();

    /**
     * 清理配置
     */
    private CleanConfig clean = new CleanConfig();

    /**
     * 异步配置类
     */
    @Data
    public static class AsyncConfig {
        /**
         * 核心线程数
         */
        private int corePoolSize = 5;

        /**
         * 最大线程数
         */
        private int maxPoolSize = 10;

        /**
         * 队列容量
         */
        private int queueCapacity = 1000;

        /**
         * 线程名前缀
         */
        private String threadNamePrefix = "log-async-";

        /**
         * 等待任务完成时间（秒）
         */
        private int awaitTerminationSeconds = 60;
    }

    /**
     * 缓存配置类
     */
    @Data
    public static class CacheConfig {
        /**
         * 缓存过期时间（秒）
         */
        private int expireTime = 3600;

        /**
         * 是否启用缓存
         */
        private boolean enabled = true;

        /**
         * 缓存键前缀
         */
        private String keyPrefix = "PAI4J_LOG_";
    }

    /**
     * 清理配置类
     */
    @Data
    public static class CleanConfig {
        /**
         * 日志保留天数
         */
        private int retainDays = 30;

        /**
         * 是否启用自动清理
         */
        private boolean autoClean = false;

        /**
         * 自动清理执行时间（cron表达式）
         */
        private String cronExpression = "0 0 2 * * ?";
    }
}
